AIC average by age group

Examine age-related change in parameter estimates from models
Run regressions between model parameters and age
##
## Call:
## lm(formula = LL ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -154.578 -58.515 9.859 54.104 200.722
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -215.354 19.598 -10.99 <2e-16 ***
## age 1.591 1.170 1.36 0.176
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 72.28 on 148 degrees of freedom
## Multiple R-squared: 0.01235, Adjusted R-squared: 0.005673
## F-statistic: 1.85 on 1 and 148 DF, p-value: 0.1758
##
## Call:
## lm(formula = alphaPosChoice ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3090 -0.1999 -0.0917 0.1265 0.6863
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.320756 0.074344 4.314 2.91e-05 ***
## age -0.001369 0.004438 -0.308 0.758
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2742 on 148 degrees of freedom
## Multiple R-squared: 0.0006424, Adjusted R-squared: -0.00611
## F-statistic: 0.09514 on 1 and 148 DF, p-value: 0.7582
##
## Call:
## lm(formula = alphaNegChoice ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.20679 -0.12581 -0.06585 0.00345 0.81559
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.304868 0.061239 4.978 1.76e-06 ***
## age -0.011916 0.003656 -3.260 0.00138 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2259 on 148 degrees of freedom
## Multiple R-squared: 0.06698, Adjusted R-squared: 0.06068
## F-statistic: 10.62 on 1 and 148 DF, p-value: 0.001385
##
## Call:
## lm(formula = alphaPosComp ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.23170 -0.17898 -0.12042 0.05715 0.87437
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.300954 0.073408 4.100 6.8e-05 ***
## age -0.007638 0.004382 -1.743 0.0834 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2707 on 148 degrees of freedom
## Multiple R-squared: 0.02012, Adjusted R-squared: 0.01349
## F-statistic: 3.038 on 1 and 148 DF, p-value: 0.08341
##
## Call:
## lm(formula = alphaNegComp ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.2432 -0.2170 -0.1918 0.2049 0.7903
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.270545 0.088504 3.057 0.00265 **
## age -0.003096 0.005284 -0.586 0.55877
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3264 on 148 degrees of freedom
## Multiple R-squared: 0.002315, Adjusted R-squared: -0.004426
## F-statistic: 0.3434 on 1 and 148 DF, p-value: 0.5588
##
## Call:
## lm(formula = betaAgency ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.158 -4.012 -1.747 2.933 20.338
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.53843 1.51875 2.330 0.02117 *
## age 0.24547 0.09067 2.707 0.00758 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.601 on 148 degrees of freedom
## Multiple R-squared: 0.04719, Adjusted R-squared: 0.04075
## F-statistic: 7.33 on 1 and 148 DF, p-value: 0.007579
##
## Call:
## lm(formula = betaMachine ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.833 -3.151 -1.048 1.911 22.856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.9326 1.3383 3.686 0.000319 ***
## age 0.1402 0.0799 1.755 0.081273 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.936 on 148 degrees of freedom
## Multiple R-squared: 0.02039, Adjusted R-squared: 0.01378
## F-statistic: 3.081 on 1 and 148 DF, p-value: 0.08127
##
## Call:
## lm(formula = agencyBonus ~ age, data = model_params)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.72271 -0.30021 -0.19730 0.08013 2.37437
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.72607 0.18718 3.879 0.000157 ***
## age -0.01312 0.01117 -1.174 0.242346
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6904 on 148 degrees of freedom
## Multiple R-squared: 0.009224, Adjusted R-squared: 0.00253
## F-statistic: 1.378 on 1 and 148 DF, p-value: 0.2423
Plot relations between model parameters and age

Parameter summary statistics
Beta model
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: estimate ~ ageZ * betaType + (1 | subject_id)
## Data: betas
## Effect df F p.value
## 1 ageZ 1, 148.00 6.75 * .010
## 2 betaType 1, 148.00 0.45 .503
## 3 ageZ:betaType 1, 148.00 1.55 .216
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: estimate ~ ageZ * betaType + (1 | subject_id)
## Data: data
##
## REML criterion at convergence: 1803.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.9989 -0.5011 -0.1486 0.4083 3.2037
##
## Random effects:
## Groups Name Variance Std.Dev.
## subject_id (Intercept) 14.21 3.770
## Residual 13.66 3.696
## Number of obs: 300, groups: subject_id, 150
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 7.3161 0.3745 148.0000 19.534 <2e-16 ***
## ageZ 0.9745 0.3752 148.0000 2.597 0.0103 *
## betaType1 0.1433 0.2134 148.0000 0.672 0.5028
## ageZ:betaType1 0.2658 0.2137 148.0000 1.244 0.2155
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) ageZ btTyp1
## ageZ 0.000
## betaType1 0.000 0.000
## ageZ:btTyp1 0.000 0.000 0.000
|
Predictor
|
Estimates
|
SE
|
Statistic
|
p
|
|
intercept
|
7.32
|
0.37
|
19.53
|
<0.001
|
|
age
|
0.97
|
0.38
|
2.60
|
0.010
|
|
decision stage
|
0.14
|
0.21
|
0.67
|
0.502
|
|
age x decision stage
|
0.27
|
0.21
|
1.24
|
0.215
|
Learning rate model
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: estimate ~ age_z * valence * agency + (1 | subject_id)
## Data: learning_rates
## Effect df F p.value
## 1 age_z 1, 148.00 5.38 * .022
## 2 valence 1, 444.00 11.17 *** <.001
## 3 agency 1, 444.00 0.10 .753
## 4 age_z:valence 1, 444.00 0.51 .477
## 5 age_z:agency 1, 444.00 0.09 .762
## 6 valence:agency 1, 444.00 28.34 *** <.001
## 7 age_z:valence:agency 1, 444.00 3.20 + .074
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: estimate ~ age_z * valence * agency + (1 | subject_id)
## Data: data
##
## REML criterion at convergence: 199.6
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.5327 -0.6127 -0.3271 0.2431 3.2261
##
## Random effects:
## Groups Name Variance Std.Dev.
## subject_id (Intercept) 0.008624 0.09287
## Residual 0.067885 0.26055
## Number of obs: 600, groups: subject_id, 150
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.203361 0.013063 148.000000 15.568 < 2e-16 ***
## age_z -0.030316 0.013074 148.000000 -2.319 0.0218 *
## valence1 -0.035555 0.010637 444.000000 -3.343 0.0009 ***
## agency1 0.003345 0.010637 444.000000 0.314 0.7533
## age_z:valence1 -0.007579 0.010646 444.000000 -0.712 0.4769
## age_z:agency1 -0.003219 0.010646 444.000000 -0.302 0.7625
## valence1:agency1 -0.056629 0.010637 444.000000 -5.324 1.62e-07 ***
## age_z:valence1:agency1 -0.019045 0.010646 444.000000 -1.789 0.0743 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) age_z valnc1 agncy1 ag_z:v1 ag_z:g1 vln1:1
## age_z 0.000
## valence1 0.000 0.000
## agency1 0.000 0.000 0.000
## age_z:vlnc1 0.000 0.000 0.000 0.000
## age_z:gncy1 0.000 0.000 0.000 0.000 0.000
## vlnc1:gncy1 0.000 0.000 0.000 0.000 0.000 0.000
## ag_z:vln1:1 0.000 0.000 0.000 0.000 0.000 0.000 0.000
##
## Paired t-test
##
## data: model_params$alphaPosChoice and model_params$alphaNegChoice
## t = 6.9666, df = 149, p-value = 9.73e-11
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 0.1320728 0.2366607
## sample estimates:
## mean difference
## 0.1843667
##
## Paired t-test
##
## data: model_params$alphaPosComp and model_params$alphaNegComp
## t = -1.1108, df = 149, p-value = 0.2685
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -0.11712714 0.03283236
## sample estimates:
## mean difference
## -0.04214739
|
Predictor
|
Estimates
|
SE
|
Statistic
|
p
|
|
intercept
|
0.20
|
0.01
|
15.57
|
<0.001
|
|
age
|
-0.03
|
0.01
|
-2.32
|
0.021
|
|
valence
|
-0.04
|
0.01
|
-3.34
|
0.001
|
|
agency
|
0.00
|
0.01
|
0.31
|
0.753
|
|
age x valence
|
-0.01
|
0.01
|
-0.71
|
0.477
|
|
age x agency
|
-0.00
|
0.01
|
-0.30
|
0.762
|
|
valence x agency
|
-0.06
|
0.01
|
-5.32
|
<0.001
|
|
age x valence x agency
|
-0.02
|
0.01
|
-1.79
|
0.074
|
Learning rate plot

Relation between parameter estimates and ‘model-free’
regressions
##
## Call:
## lm(formula = `(Intercept)` ~ agencyBonus, data = voc_REs_RL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.9134 -0.6544 0.0318 0.7376 5.8069
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2960 0.1436 -9.025 8.77e-16 ***
## agencyBonus 2.4096 0.1668 14.449 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.407 on 148 degrees of freedom
## Multiple R-squared: 0.5852, Adjusted R-squared: 0.5824
## F-statistic: 208.8 on 1 and 148 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = voc_z ~ betaAgency, data = voc_REs_RL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.13455 -0.22221 -0.03153 0.14601 1.68526
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.779560 0.049299 -15.81 <2e-16 ***
## betaAgency 0.102000 0.005251 19.42 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3666 on 148 degrees of freedom
## Multiple R-squared: 0.7182, Adjusted R-squared: 0.7163
## F-statistic: 377.3 on 1 and 148 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = voc_z ~ betaAgency + age, data = voc_REs_RL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.16014 -0.23331 -0.02059 0.18482 1.67324
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.967014 0.099995 -9.671 <2e-16 ***
## betaAgency 0.099521 0.005315 18.723 <2e-16 ***
## age 0.012893 0.006006 2.147 0.0335 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3622 on 147 degrees of freedom
## Multiple R-squared: 0.7268, Adjusted R-squared: 0.7231
## F-statistic: 195.5 on 2 and 147 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = voc_z ~ betaAgency + betaMachine, data = voc_REs_RL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.13574 -0.23276 -0.02974 0.13115 1.68646
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.786072 0.056240 -13.977 <2e-16 ***
## betaAgency 0.101204 0.006202 16.319 <2e-16 ***
## betaMachine 0.001736 0.007136 0.243 0.808
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3678 on 147 degrees of freedom
## Multiple R-squared: 0.7184, Adjusted R-squared: 0.7145
## F-statistic: 187.5 on 2 and 147 DF, p-value: < 2.2e-16
LS0tCnRpdGxlOiAiRTIgVm9DIEFuYWx5c2VzIFBhcnQgMzogUkwgQW5hbHlzZXMiCmRhdGU6IDMvMjcvMjQKb3V0cHV0OgogICAgaHRtbF9kb2N1bWVudDoKICAgICAgICBkZl9wcmludDogJ3BhZ2VkJwogICAgICAgIHRvYzogdHJ1ZQogICAgICAgIHRvY19mbG9hdDoKICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICAgICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQotLS0KCmBgYHtyIGNodW5rIHNldHRpbmdzLCBpbmNsdWRlID0gRkFMU0V9CiMgc2V0IGNodW5rIHNldHRpbmdzCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZHBpPTYwMCkKa25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkKYGBgCgpgYGB7ciBsb2FkIGxpYnJhcmllcywgaW5jbHVkZSA9IEZ9CgojbG9hZCBsaWJyYXJpZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2x1ZSkKbGlicmFyeShhZmV4KQpsaWJyYXJ5KGxhdGV4MmV4cCkKbGlicmFyeShzalBsb3QpCgojbG9hZCBzY3JpcHRzCnNvdXJjZSgnYW5hbHlzaXNfc2NyaXB0cy92b2NfZnVuY3Rpb25zLlInKQpgYGAKCmBgYHtyIGltcG9ydCBkYXRhfQojIHJlYWQgaW4gcGFydGljaXBhbnQgYWdlcwpwYXJ0aWNpcGFudF9hZ2VzIDwtIHJlYWRfY3N2KCdkYXRhL3ZvY19zdWJfaW5mby5jc3YnKSAKCiMjIHJlYWQgaW4gYWljcwphaWNzID0gcmVhZF9jc3YoIlJMX21vZGVsaW5nL291dHB1dC9haWNzX2FsbF8xNl9tb2RlbHNfMTAwaXRlci5jc3YiKSAlPiUKICByZW5hbWUoc3ViamVjdF9pZCA9IHN1YklEKQoKIyBjb21iaW5lIHdpdGggYWdlcwphaWNzIDwtIGlubmVyX2pvaW4oYWljcywgcGFydGljaXBhbnRfYWdlcywgYnkgPSAnc3ViamVjdF9pZCcpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oYWdlIDwgMTMgfiAiQ2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTIuOTkgJiBhZ2UgPCAxOCB+ICJBZG9sZXNjZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPiAxNy45OSB+ICJBZHVsdHMiKSkKCmFpY3MkYWdlX2dyb3VwIDwtIGZhY3RvcihhaWNzJGFnZV9ncm91cCwgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCiAgICAgICAgIAoKI3Bpdm90IGxvbmdlcgptb2RlbF9yZXN1bHRzIDwtIHBpdm90X2xvbmdlcihhaWNzLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbHMgPSBvbmVBbHBoYV9vbmVCZXRhOmZvdXJBbHBoYV90d29CZXRhX2FnZW5jeUJvbnVzLAogICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIkFJQyIpCgoKbW9kZWxfcmVzdWx0cyRtb2RlbCA8LSBmYWN0b3IobW9kZWxfcmVzdWx0cyRtb2RlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm9uZUFscGhhX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmVBbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VyQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdXJBbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25lQWxwaGFfb25lQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZUFscGhhX3R3b0JldGFfYWdlbmN5Qm9udXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYV9vbmVCZXRhX2FnZW5jeUJvbnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfdHdvQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfb25lQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfdHdvQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdXJBbHBoYV9vbmVCZXRhX2FnZW5jeUJvbnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX3R3b0JldGFfYWdlbmN5Qm9udXMiKSkKbW9kZWxfcmVzdWx0cyA8LSBtb2RlbF9yZXN1bHRzICU+JQogIG11dGF0ZShhZ2VuY3lCb251cyA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KG1vZGVsLCAiYWdlbmN5IikgfiAiV2l0aCBBZ2VuY3kgQm9udXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3RyX2RldGVjdChtb2RlbCwgImFnZW5jeSIpIH4gIk5vIEFnZW5jeSBCb251cyIpLAogICAgICAgICBzaG9ydE5hbWUgPSBzdHJfcmVtb3ZlKG1vZGVsLCAnX2FnZW5jeUJvbnVzJykpCgptb2RlbF9yZXN1bHRzJHNob3J0TmFtZSA8LSBmYWN0b3IobW9kZWxfcmVzdWx0cyRzaG9ydE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJvbmVBbHBoYV9vbmVCZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZUFscGhhX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX3R3b0JldGEiKSkKYGBgCgojICBBSUMgYXZlcmFnZSBieSBhZ2UgZ3JvdXAgCmBgYHtyIHBsb3QgQUlDIGJ5IGFnZSBncm91cCwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDUsIHVuaXRzID0gImluIn0KI3N1bW1hcml6ZQptb2RlbF9zdW1tYXJ5IDwtIG1vZGVsX3Jlc3VsdHMgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBzaG9ydE5hbWUsIGFnZW5jeUJvbnVzKSAlPiUKICBzdW1tYXJpemUobWVhbl9haWMgPSBtZWFuKEFJQykpCgojIyBQbG90IHRoZSByZXN1bHRzIGJ5IGFnZSBncm91cCAKQUlDX2FnZV9wbG90IDwtIGdncGxvdChtb2RlbF9zdW1tYXJ5LCBhZXMoeCA9IGFnZV9ncm91cCwgeSA9IG1lYW5fYWljLCBmaWxsID0gc2hvcnROYW1lKSkrCiAgZmFjZXRfd3JhcCh+YWdlbmN5Qm9udXMpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX21hbnVhbChuYW1lID0gIk1vZGVsIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKGNvbG9yOCwgY29sb3IxLCBjb2xvcjIsIGNvbG9yMywgY29sb3I0LCBjb2xvcjUsIGNvbG9yNiwgY29sb3I3LCBjb2xvcjEpLAogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICBjKFRlWCgnJG9uZVxcYWxwaGFcXF9vbmVcXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyRvbmVcXGFscGhhXFxfdHdvXFxiZXRhJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVYKCckdHdvQ2hvaWNlXFxhbHBoYVxcX29uZVxcYmV0YScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgnJHR3b0Nob2ljZVxcYWxwaGFcXF90d29cXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyR0d29WYWxlbmNlZFxcYWxwaGFcXF9vbmVcXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyR0d29WYWxlbmNlZFxcYWxwaGFcXF90d29cXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyRmb3VyXFxhbHBoYVxcX29uZVxcYmV0YScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgnJGZvdXJcXGFscGhhXFxfdHdvXFxiZXRhJykpKSArIAogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygzNTAsIDY1MCkpICsKICB5bGFiKCJNZWFuIEFJQyIpICsKICB4bGFiKCIiKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpCkFJQ19hZ2VfcGxvdApgYGAKCgojICBFeGFtaW5lIGFnZS1yZWxhdGVkIGNoYW5nZSBpbiBwYXJhbWV0ZXIgZXN0aW1hdGVzIGZyb20gbW9kZWxzCmBgYHtyIGxvYWQgcGFyYW1ldGVycyBmcm9tIHdpbm5pbmcgbW9kZWx9Cm1vZGVsX3BhcmFtcyA8LSByZWFkX2NzdigiUkxfbW9kZWxpbmcvb3V0cHV0L21vZGVsX2ZpdHNfcmVhbF9kYXRhL2ZvdXJBbHBoYV90d29CZXRhX2FnZW5jeUJvbnVzLmNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjKCJuZWdMTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dQb3N0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFJQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCSUMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFQb3NDaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFOZWdDaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFQb3NDb21wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhTmVnQ29tcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZXRhQWdlbmN5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJldGFNYWNoaW5lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFnZW5jeUJvbnVzIikpCgojYWRkIHN1YiBJRCBhbmQgaW5mb3JtYXRpb24Kc3ViamVjdF9pZCA8LSBtb2RlbF9yZXN1bHRzICU+JSBzZWxlY3Qoc3ViamVjdF9pZCkgJT4lIHVuaXF1ZSgpCm1vZGVsX3BhcmFtcyA8LSBiaW5kX2NvbHMoc3ViamVjdF9pZCwgbW9kZWxfcGFyYW1zKQptb2RlbF9wYXJhbXMgPC0gaW5uZXJfam9pbihwYXJ0aWNpcGFudF9hZ2VzLCBtb2RlbF9wYXJhbXMsIGJ5ID0gYygic3ViamVjdF9pZCIpKQoKYGBgCgoKIyBSdW4gcmVncmVzc2lvbnMgYmV0d2VlbiBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBhZ2UKYGBge3IgcGFyYW1ldGVyIHJlZ3Jlc3Npb25zfQptb2RlbF9wYXJhbXMkTEwgPC0gbW9kZWxfcGFyYW1zJG5lZ0xMICogLTEKCiMgTG9nIGxpa2VsaWhvb2QKc3VtbWFyeShsbShMTCB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgbm90IHNpZ25pZmljYW50CgojIEFscGhhIFBvcyBDaG9pY2UKc3VtbWFyeShsbShhbHBoYVBvc0Nob2ljZSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiNub3Qgc2lnbmlmaWNhbnQKCiMgQWxwaGEgTmVnIENob2ljZQpzdW1tYXJ5KGxtKGFscGhhTmVnQ2hvaWNlIH4gYWdlLCBkYXRhID0gbW9kZWxfcGFyYW1zKSkKIyBzaWduaWZpY2FudAoKIyBBbHBoYSBQb3MgQ29tcApzdW1tYXJ5KGxtKGFscGhhUG9zQ29tcCB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiNub3Qgc2lnbmlmaWNhbnQKCiMgQWxwaGEgTmVnIENvbXAKc3VtbWFyeShsbShhbHBoYU5lZ0NvbXAgfiBhZ2UsIGRhdGEgPSBtb2RlbF9wYXJhbXMpKQojbm90IHNpZ25pZmljYW50CgojIEJldGEgQWdlbmN5CnN1bW1hcnkobG0oYmV0YUFnZW5jeSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgc2lnbmlmaWNhbnQKCiMgQmV0YSBCYW5kaXQKc3VtbWFyeShsbShiZXRhTWFjaGluZSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgbm90IHNpZ25pZmljYW50CgojIGFnZW5jeSBib251cwpzdW1tYXJ5KGxtKGFnZW5jeUJvbnVzIH4gYWdlLCBkYXRhID0gbW9kZWxfcGFyYW1zKSkKIyBub3Qgc2lnbmlmaWNhbnQKCmBgYAoKCgojIFBsb3QgcmVsYXRpb25zIGJldHdlZW4gbW9kZWwgcGFyYW1ldGVycyBhbmQgYWdlCmBgYHtyIGFnZSBwYXJhbWV0ZXIgcGxvdCwgZmlnLndpZHRoID0gNywgZmlnLmhlaWdodCA9IDQsIHVuaXRzID0gImluIn0KCnBhcmFtc19sb25nIDwtIG1vZGVsX3BhcmFtcyAlPiUKICBwaXZvdF9sb25nZXIobmFtZXNfdG8gPSAicGFyYW0iLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZXN0aW1hdGUiLAogICAgICAgICAgICAgICBjb2xzID0gYyhhbHBoYVBvc0Nob2ljZTphZ2VuY3lCb251cykpIAoKcGFyYW1zX2xvbmckcGFyYW0gPC0gZmFjdG9yKHBhcmFtc19sb25nJHBhcmFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImFscGhhUG9zQ2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhTmVnQ2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhUG9zQ29tcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYU5lZ0NvbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmV0YUFnZW5jeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZXRhTWFjaGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZ2VuY3lCb251cyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhUZVgoIiRcXGFscGhhX3tjaG9pY2VfK30kIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoIiRcXGFscGhhX3tjaG9pY2VfLX0kIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoIiRcXGFscGhhX3tjb21wXyt9JCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVYKCIkXFxhbHBoYV97Y29tcF8tfSQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgiJFxcYmV0YV97YWdlbmN5fSQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgiJFxcYmV0YV97bWFjaGluZX0kIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZ2VuY3l+Qm9udXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQoKcGFyYW1zX3Bsb3QgPC0gZ2dwbG90KHBhcmFtc19sb25nLCBhZXMoeCA9IGFnZSwgeSA9IGVzdGltYXRlLCBjb2xvciA9IHBhcmFtKSkgKwogIGZhY2V0X3dyYXAofnBhcmFtLCBzY2FsZSA9ICJmcmVlIiwgbGFiZWxsZXIgPSBsYWJlbF9wYXJzZWQsIG5yb3cgPSAyKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhZXMoZmlsbCA9IHBhcmFtKSkgKwogIHlsYWIoIlBhcmFtZXRlciBFc3RpbWF0ZSIpICsKICB4bGFiKCJBZ2UiKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGFyYW1zX3Bsb3QKYGBgCgoKIyBQYXJhbWV0ZXIgc3VtbWFyeSBzdGF0aXN0aWNzCmBgYHtyIHBhcmFtZXRlciBzdW1tYXJ5IHN0YXRzfQoKcGFyYW1fc3VtbWFyeSA8LSBwYXJhbXNfbG9uZyAlPiUKICAgIGdyb3VwX2J5KHBhcmFtKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuRXN0aW1hdGUgPSBtZWFuKGVzdGltYXRlKSwKICAgICAgICAgICAgc2VFc3RpbWF0ZSA9IHNkKGVzdGltYXRlKS9zcXJ0KG4oKSkpCnBhcmFtX3N1bW1hcnkKCmBgYAoKIyBCZXRhIG1vZGVsCmBgYHtyIGJldGEgcmVncmVzc2lvbn0KYmV0YXMgPC0gbW9kZWxfcGFyYW1zICU+JQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKGJldGFBZ2VuY3ksIGJldGFNYWNoaW5lKSwKICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJiZXRhVHlwZSIsCiAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImVzdGltYXRlIikgJT4lCiAgICBzZWxlY3Qoc3ViamVjdF9pZCwgYWdlLCBiZXRhVHlwZSwgZXN0aW1hdGUpICU+JQogICAgdW5pcXVlKCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKYmV0YXMkYWdlWiA8LSBzY2FsZV90aGlzKGJldGFzJGFnZSkKCmJldGFfbW9kZWwgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VaICogYmV0YVR5cGUgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmV0YXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKQpiZXRhX21vZGVsCnN1bW1hcnkoYmV0YV9tb2RlbCkKCmBgYAoKYGBge3IgIGJldGEgcHJpbnQgbW9kZWwgc3RhdHN9CgpiZXRhX2xtZXIgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VaICogYmV0YVR5cGUgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiZXRhcywKICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwKICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGJldGFfbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAiZGVjaXNpb24gc3RhZ2UiLCAiYWdlIHggZGVjaXNpb24gc3RhZ2UiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5zdGF0ID0gVCwKICAgICAgICAgIHNob3cuY2kgPSBGLAogICAgICAgICAgc2hvdy5yZS52YXIgPSBGLAogICAgICAgICAgc2hvdy5pY2MgPSBGLAogICAgICAgICAgc2hvdy5uZ3JvdXBzID0gRiwKICAgICAgICAgIHNob3cub2JzID0gRiwKICAgICAgICAgIHNob3cucjIgPSBGLAogICAgICAgICAgc3RyaW5nLnNlID0gIlNFIiwKICAgICAgICAgIGVtcGgucCA9IEYsCiAgICAgICAgICBzdHJpbmcucHJlZCA9ICJQcmVkaWN0b3IiLAogICAgICAgICAgdGl0bGUgPSAiIiwKICAgICAgICAgIGR2LmxhYmVscyA9ICIiKQpgYGAKCiMgTGVhcm5pbmcgcmF0ZSBtb2RlbApgYGB7ciBsZWFybmluZyByYXRlIHJlZ3Jlc3Npb259CiMjIExlYXJuaW5nIHJhdGUgbW9kZWwKbGVhcm5pbmdfcmF0ZXMgPC0gbW9kZWxfcGFyYW1zICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhhbHBoYVBvc0Nob2ljZTphbHBoYU5lZ0NvbXApLAogICAgICAgICAgICAgICBuYW1lc190byA9ICJsZWFybmluZ1JhdGUiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZXN0aW1hdGUiKSAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgYWdlLCBsZWFybmluZ1JhdGUsIGVzdGltYXRlKSAlPiUKICB1bmlxdWUoKSAlPiUKICBtdXRhdGUodmFsZW5jZSA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIlBvcyIpIH4gIlBvc2l0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIk5lZyIpIH4gIk5lZ2F0aXZlIiksCiAgICAgICAgIGFnZW5jeSA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIkNob2ljZSIpIH4gIkNob2ljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIkNvbXAiKSB+ICJDb21wIikpCgpsZWFybmluZ19yYXRlcyRhZ2VfeiA8LSBzY2FsZV90aGlzKGxlYXJuaW5nX3JhdGVzJGFnZSkKCmxlYXJuaW5nX3JhdGVfbW9kZWwgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VfeiAqIHZhbGVuY2UgKiBhZ2VuY3kgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbGVhcm5pbmdfcmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKQpsZWFybmluZ19yYXRlX21vZGVsCnN1bW1hcnkobGVhcm5pbmdfcmF0ZV9tb2RlbCkKIyBtYWluIGVmZmVjdCBvZiBhZ2UKIyBtYWluIGVmZmVjdCBvZiB2YWxlbmNlCiMgdmFsZW5jZSB4IGFnZW5jeSBpbnRlcmFjdGlvbgoKCiN0IHRlc3QgYmV0d2VlbiBhbHBoYSBwb3MgY2hvaWNlIGFuZCBhbHBoYSBuZWcgY2hvaWNlCnQudGVzdChtb2RlbF9wYXJhbXMkYWxwaGFQb3NDaG9pY2UsIG1vZGVsX3BhcmFtcyRhbHBoYU5lZ0Nob2ljZSwgcGFpcmVkID0gVCkKI3NpZ25pZmljYW50CgojdCB0ZXN0IGJldHdlZW4gYWxwaGEgcG9zIGNvbXAgYW5kIGFscGhhIG5lZyBjb21wCnQudGVzdChtb2RlbF9wYXJhbXMkYWxwaGFQb3NDb21wLCBtb2RlbF9wYXJhbXMkYWxwaGFOZWdDb21wLCBwYWlyZWQgPSBUKQojbm90IHNpZ25pZmljYW50CgpgYGAKCgpgYGB7ciBsZWFybmluZyByYXRlIHByaW50IG1vZGVsIHN0YXRzfQoKbGVhcm5pbmdfcmF0ZV9sbWVyIDwtIG1peGVkKGVzdGltYXRlIH4gYWdlX3ogKiB2YWxlbmNlICogYWdlbmN5ICsgKDF8c3ViamVjdF9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGxlYXJuaW5nX3JhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGxlYXJuaW5nX3JhdGVfbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAidmFsZW5jZSIsICJhZ2VuY3kiLCAiYWdlIHggdmFsZW5jZSIsICJhZ2UgeCBhZ2VuY3kiLCAidmFsZW5jZSB4IGFnZW5jeSIsICJhZ2UgeCB2YWxlbmNlIHggYWdlbmN5IiksCiAgICAgICAgICB0cmFuc2Zvcm0gPSBOVUxMLAogICAgICAgICAgc2hvdy5lc3QgPSBULCAKICAgICAgICAgIHNob3cuc2UgPSBULCAKICAgICAgICAgIHNob3cuc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBMZWFybmluZyByYXRlIHBsb3QKYGBge3IgbGVhcm5pbmcgcmF0ZSBwbG90fQoKbGVhcm5pbmdfcmF0ZV9tZWFucyA8LSBsZWFybmluZ19yYXRlcyAlPiUKICAgIGdyb3VwX2J5KGFnZW5jeSwgdmFsZW5jZSkgJT4lCiAgICBzdW1tYXJpemUobWVhbkxSID0gbWVhbihlc3RpbWF0ZSksCiAgICAgICAgICAgICAgc2VMUiA9IHNkKGVzdGltYXRlKSAvIHNxcnQobigpKSkKCmxlYXJuaW5nX3JhdGVfcGxvdCA8LSBnZ3Bsb3QobGVhcm5pbmdfcmF0ZV9tZWFucywgYWVzKHggPSBhZ2VuY3ksIHkgPSBtZWFuTFIsIGZpbGwgPSB2YWxlbmNlKSkgKwogICAgZ2VvbV9iYXIoY29sb3IgPSAnYmxhY2snLCBzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArIAogICAgZ2VvbV9lcnJvcmJhcihjb2xvciA9ICJibGFjayIsIGFlcyh5bWluID0gbWVhbkxSIC0gc2VMUiwgeW1heCA9IG1lYW5MUiArIHNlTFIpLCB3aWR0aCA9IC4xLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKGNvbG9yMSwgY29sb3IyKSwgbmFtZSA9ICJWYWxlbmNlIikgKwogICAgeWxhYigiTWVhbiBMZWFybmluZyBSYXRlIikgKwogICAgeGxhYigiQWdlbmN5IikgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJQYXJ0aWNpcGFudCBDaG9pY2UiLCAiQ29tcHV0ZXIgQ2hvaWNlIikpICsKICAgIHZvY190aGVtZSgpCmxlYXJuaW5nX3JhdGVfcGxvdCAKYGBgCgoKCiMgUmVsYXRpb24gYmV0d2VlbiBwYXJhbWV0ZXIgZXN0aW1hdGVzIGFuZCAnbW9kZWwtZnJlZScgcmVncmVzc2lvbnMKYGBge3IgZG9lcyB0aGUgdm9jIGJ5IGFnZSBpbnRlcmFjdGlvbiBlZmZlY3QgcmVsYXRlIHRvIGJldGFBZ2VuY3l9CgojIFJlYWQgaW4gZGF0YQpsZWFybmluZ19kYXRhIDwtIHJlYWRfY3N2KCdkYXRhL3Byb2Nlc3NlZC9sZWFybmluZ19kYXRhLmNzdicpIAoKI2NvbWJpbmUgd2l0aCBwYXJ0aWNpcGFudCBhZ2UKbGVhcm5pbmdfZGF0YSA8LSBmdWxsX2pvaW4obGVhcm5pbmdfZGF0YSwgcGFydGljaXBhbnRfYWdlcywgYnkgPSBjKCJzdWJqZWN0X2lkIikpCgojcHJvY2VzcyAKbGVhcm5pbmdfZGF0YSA8LSBsZWFybmluZ19kYXRhICU+JQogIG11dGF0ZShldl9jaG9pY2UgPSBjYXNlX3doZW4oY29udGV4dCA9PSAwIH4gOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPT0gMSB+IDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID09IDIgfiA1KSwKICAgICAgICAgZXZfY29tcCA9IDUgKyBvZmZlciwKICAgICAgICAgdm9jID0gZXZfY2hvaWNlIC0gZXZfY29tcCwKICAgICAgICAgYmV0dGVyX21hY2hpbmUgPSBjYXNlX3doZW4ocmV3YXJkX3Byb2JfTCA+IHJld2FyZF9wcm9iX1IgfiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdhcmRfcHJvYl9MIDwgcmV3YXJkX3Byb2JfUiB+IDAsCiAgICAgICAgICksCiAgICAgICAgIHN0YWdlXzJfYWNjID0gY2FzZV93aGVuKHN0YWdlXzJfY2hvaWNlID09IGJldHRlcl9tYWNoaW5lIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2VfMl9jaG9pY2UgIT0gYmV0dGVyX21hY2hpbmUgfiAwKSkgJT4lCiAgZ3JvdXBfYnkoc3ViamVjdF9pZCwgY29udGV4dCkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbl90cmlhbCA9IHJhbmsodHJpYWwpLAogICAgICAgICBibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSArIDEpKQoKIyBleGNsdWRlIGZpcnN0LXN0YWdlIG1pc3NlcyBhbmQgZmlyc3Qtc3RhZ2UgUlQgPCAxNTAgbXMKbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCA8LSBsZWFybmluZ19kYXRhICU+JQogIGZpbHRlcihzdGFnZV8xX3J0ID4gMTUwKQoKI2dldCBhZ2VuY3kgbW9kZWwgZGF0YQphZ2VuY3lfbW9kZWxfZGF0YSA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JQogIHNlbGVjdChzdWJqZWN0X2lkLCBzdGFnZV8xX2Nob2ljZSwgdm9jLCBjb25kaXRpb25fdHJpYWwsIGJsb2NrLCB0cmlhbCwgYWdlKQoKIyMgUkVHUkVTU0lPTiBNT0RFTCAjIwojeiBzY29yZSBjb250aW51b3VzIHZhcmlhYmxlcwphZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkIDwtIGZhY3RvcihhZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQphZ2VuY3lfbW9kZWxfZGF0YSR2b2NfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJHZvYykKYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsIDwtIHNjYWxlX3RoaXMoYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQphZ2VuY3lfbW9kZWxfZGF0YSRhZ2VfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJGFnZSkKCiMgcHJlZGljdCBhZ2VuY3kgY2hvaWNlIGZyb20gdXRpbGl0eSBvZiBjb250cm9sLCB0cmlhbCwgbGluZWFyIGFnZQphZ2VuY3lfYnlWT0NUcmlhbEFnZS5nbG1lciA9IG1peGVkKHN0YWdlXzFfY2hvaWNlIH4gdm9jX3ogKiBjb25kaXRpb25fdHJpYWwgKyAodm9jX3ogKiBjb25kaXRpb25fdHJpYWwgfCBzdWJqZWN0X2lkKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhZ2VuY3lfbW9kZWxfZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIixvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpLAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikgCgojZ2V0IHJhbmRvbSBlZmZlY3RzCnZvY19SRXMgPC0gcmFuZWYoYWdlbmN5X2J5Vk9DVHJpYWxBZ2UuZ2xtZXIpJHN1YmplY3RfaWQgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInN1YmplY3RfaWQiKQoKdm9jX1JFcyRzdWJqZWN0X2lkIDwtIGFzLm51bWVyaWModm9jX1JFcyRzdWJqZWN0X2lkKQoKI2NvbWJpbmUgd2l0aCBSTCBlc3RpbWF0ZXMKdm9jX1JFc19STCA8LSBmdWxsX2pvaW4odm9jX1JFcywgbW9kZWxfcGFyYW1zLCBieSA9ICdzdWJqZWN0X2lkJykKCmBgYAoKCmBgYHtyIHJ1biBSRSBhbmQgcGFyYW1ldGVyIHJlZ3Jlc3Npb25zfQoKI3J1biByZWdyZXNzaW9ucwoKI2FnZW5jeSBib251cwp2b2NfUkVfYWdlbmN5Qm9udXMubG0gPC0gbG0oYChJbnRlcmNlcHQpYCB+IGFnZW5jeUJvbnVzLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYWdlbmN5Qm9udXMubG0pCgojYmV0YSBhZ2VuY3kKdm9jX1JFX2JldGFBZ2VuY3kubG0gPC0gbG0odm9jX3ogfiBiZXRhQWdlbmN5LCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YUFnZW5jeS5sbSkKCiNjb250cm9sIGZvciBhZ2UKdm9jX1JFX2JldGFBZ2VuY3lBZ2UubG0gPC0gbG0odm9jX3ogfiBiZXRhQWdlbmN5ICsgYWdlLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YUFnZW5jeUFnZS5sbSkKCiNjb250cm9sIGZvciBiZXRhIG1hY2hpbmUKdm9jX1JFX2JldGFNYWNoaW5lLmxtIDwtIGxtKHZvY196IH4gYmV0YUFnZW5jeSArIGJldGFNYWNoaW5lLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YU1hY2hpbmUubG0pCgoKYGBgCg==